var runtime.work

295 uses

	runtime (current package)
		metrics.go#L748: 	a.cpuStats = work.cpuStats
		mgc.go#L196: 	work.startSema = 1
		mgc.go#L197: 	work.markDoneSema = 1
		mgc.go#L198: 	work.spanSPMCs.list.init(unsafe.Offsetof(spanSPMC{}.allnode))
		mgc.go#L199: 	lockInit(&work.sweepWaiters.lock, lockRankSweepWaiters)
		mgc.go#L200: 	lockInit(&work.assistQueue.lock, lockRankAssistQueue)
		mgc.go#L201: 	lockInit(&work.strongFromWeak.lock, lockRankStrongFromWeakQueue)
		mgc.go#L202: 	lockInit(&work.wbufSpans.lock, lockRankWbufSpans)
		mgc.go#L203: 	lockInit(&work.spanSPMCs.lock, lockRankSpanSPMCs)
		mgc.go#L325: var work workType
		mgc.go#L549: 	n := work.cycles.Load()
		mgc.go#L564: 	for work.cycles.Load() == n+1 && sweepone() != ^uintptr(0) {
		mgc.go#L579: 	for work.cycles.Load() == n+1 && !isSweepDone() {
		mgc.go#L587: 	cycle := work.cycles.Load()
		mgc.go#L600: 	work.goroutineLeak.pending.Store(true)
		mgc.go#L638: 	for work.goroutineLeak.pending.Load() {
		mgc.go#L648: 		lock(&work.sweepWaiters.lock)
		mgc.go#L649: 		nMarks := work.cycles.Load()
		mgc.go#L656: 			unlock(&work.sweepWaiters.lock)
		mgc.go#L662: 		work.sweepWaiters.list.push(getg())
		mgc.go#L663: 		goparkunlock(&work.sweepWaiters.lock, waitReasonWaitForGCCycle, traceBlockUntilGCEnds, 1)
		mgc.go#L722: 		return int32(t.n-work.cycles.Load()) > 0
		mgc.go#L772: 	semacquire(&work.startSema)
		mgc.go#L775: 		semrelease(&work.startSema)
		mgc.go#L796: 	work.userForced = trigger.kind == gcTriggerCycle
		mgc.go#L821: 	work.stwprocs, work.maxprocs = gomaxprocs, gomaxprocs
		mgc.go#L822: 	if work.stwprocs > numCPUStartup {
		mgc.go#L825: 		work.stwprocs = numCPUStartup
		mgc.go#L827: 	work.heap0 = gcController.heapLive.Load()
		mgc.go#L828: 	work.pauseNS = 0
		mgc.go#L829: 	work.mode = mode
		mgc.go#L832: 	work.tSweepTerm = now
		mgc.go#L839: 	work.cpuStats.accumulateGCPauseTime(stw.stoppingCPUTime, 1)
		mgc.go#L877: 	work.cycles.Add(1)
		mgc.go#L894: 	if work.goroutineLeak.pending.Load() {
		mgc.go#L895: 		work.goroutineLeak.enabled = true
		mgc.go#L896: 		work.goroutineLeak.pending.Store(false)
		mgc.go#L944: 	work.cpuStats.accumulateGCPauseTime(nanotime()-stw.finishedStopping, work.maxprocs)
		mgc.go#L949: 		work.pauseNS += now - stw.startedStopping
		mgc.go#L950: 		work.tMark = now
		mgc.go#L969: 	semrelease(&work.startSema)
		mgc.go#L1018: 	semacquire(&work.markDoneSema)
		mgc.go#L1028: 		semrelease(&work.markDoneSema)
		mgc.go#L1038: 	work.strongFromWeak.block = true
		mgc.go#L1080: 	work.tMarkTerm = now
		mgc.go#L1091: 	work.cpuStats.accumulateGCPauseTime(stw.stoppingCPUTime, 1)
		mgc.go#L1115: 	if restart || (work.goroutineLeak.enabled && !work.goroutineLeak.done) {
		mgc.go#L1124: 			work.goroutineLeak.done = findGoroutineLeaks()
		mgc.go#L1130: 			work.cpuStats.accumulateGCPauseTime(nanotime()-stw.finishedStopping, work.maxprocs)
		mgc.go#L1134: 			work.pauseNS += now - stw.startedStopping
		mgc.go#L1155: 	work.strongFromWeak.block = false
		mgc.go#L1161: 	semrelease(&work.markDoneSema)
		mgc.go#L1170: 	gcController.endCycle(now, int(gomaxprocs), work.userForced)
		mgc.go#L1223: 	oldRootJobs := work.markrootJobs.Load()
		mgc.go#L1229: 	var vIndex, ivIndex int = work.nMaybeRunnableStackRoots, work.nStackRoots
		mgc.go#L1232: 		if work.stackRoots[vIndex].isMaybeRunnable() {
		mgc.go#L1237: 			if gp := work.stackRoots[ivIndex]; gp.isMaybeRunnable() {
		mgc.go#L1238: 				work.stackRoots[ivIndex] = work.stackRoots[vIndex]
		mgc.go#L1239: 				work.stackRoots[vIndex] = gp
		mgc.go#L1246: 	newRootJobs := work.baseStacks + uint32(vIndex)
		mgc.go#L1248: 		work.nMaybeRunnableStackRoots = vIndex
		mgc.go#L1249: 		work.markrootJobs.Store(newRootJobs)
		mgc.go#L1302: 	if work.nMaybeRunnableStackRoots == work.nStackRoots {
		mgc.go#L1314: 	work.goroutineLeak.count = work.nStackRoots - work.nMaybeRunnableStackRoots
		mgc.go#L1316: 	for i := work.nMaybeRunnableStackRoots; i < work.nStackRoots; i++ {
		mgc.go#L1317: 		gp := work.stackRoots[i]
		mgc.go#L1337: 	work.markrootJobs.Add(int32(work.nStackRoots - work.nMaybeRunnableStackRoots))
		mgc.go#L1338: 	work.nMaybeRunnableStackRoots = work.nStackRoots
		mgc.go#L1348: 	work.heap1 = gcController.heapLive.Load()
		mgc.go#L1378: 		work.heap2 = work.bytesMarked
		mgc.go#L1388: 		stwSwept = gcSweep(work.mode)
		mgc.go#L1418: 	work.pauseNS += now - stw.startedStopping
		mgc.go#L1419: 	work.tEnd = now
		mgc.go#L1422: 	memstats.pause_ns[memstats.numgc%uint32(len(memstats.pause_ns))] = uint64(work.pauseNS)
		mgc.go#L1424: 	memstats.pause_total_ns += uint64(work.pauseNS)
		mgc.go#L1434: 	work.cpuStats.accumulateGCPauseTime(now-stw.finishedStopping, work.maxprocs)
		mgc.go#L1435: 	work.cpuStats.accumulate(now, true)
		mgc.go#L1439: 	memstats.gc_cpu_fraction = float64(work.cpuStats.GCTotalTime-work.cpuStats.GCIdleTime) / float64(work.cpuStats.TotalTime)
		mgc.go#L1451: 	if work.userForced {
		mgc.go#L1456: 	lock(&work.sweepWaiters.lock)
		mgc.go#L1458: 	injectglist(&work.sweepWaiters.list)
		mgc.go#L1459: 	unlock(&work.sweepWaiters.lock)
		mgc.go#L1494: 	if work.goroutineLeak.enabled {
		mgc.go#L1502: 		work.goroutineLeak.enabled = false
		mgc.go#L1503: 		goroutineLeakDone = work.goroutineLeak.done
		mgc.go#L1504: 		work.goroutineLeak.done = false
		mgc.go#L1578: 			" @", string(itoaDiv(sbuf[:], uint64(work.tSweepTerm-runtimeInitTime)/1e6, 3)), "s ",
		mgc.go#L1584: 		prev := work.tSweepTerm
		mgc.go#L1585: 		for i, ns := range []int64{work.tMark, work.tMarkTerm, work.tEnd} {
		mgc.go#L1594: 			int64(work.stwprocs) * (work.tMark - work.tSweepTerm),
		mgc.go#L1598: 			int64(work.stwprocs) * (work.tEnd - work.tMarkTerm),
		mgc.go#L1609: 			work.heap0>>20, "->", work.heap1>>20, "->", work.heap2>>20, " MB, ",
		mgc.go#L1613: 			work.maxprocs, " P")
		mgc.go#L1614: 		if work.userForced {
		mgc.go#L1725: 	work.nproc = ^uint32(0)
		mgc.go#L1726: 	work.nwait = ^uint32(0)
		mgc.go#L1928: 	return work.nwait == work.nproc && !gcMarkWorkAvailable()
		mgc.go#L1934: 	decnwait := atomic.Xadd(&work.nwait, -1)
		mgc.go#L1935: 	if decnwait == work.nproc {
		mgc.go#L1936: 		println("runtime: work.nwait=", decnwait, "work.nproc=", work.nproc)
		mgc.go#L1945: 	incnwait := atomic.Xadd(&work.nwait, +1)
		mgc.go#L1946: 	if incnwait > work.nproc {
		mgc.go#L1947: 		println("runtime: work.nwait=", incnwait, "work.nproc=", work.nproc)
		mgc.go#L1950: 	return incnwait == work.nproc && !gcMarkWorkAvailable()
		mgc.go#L1960: 	work.tstart = startTime
		mgc.go#L1963: 	if next, jobs := work.markrootNext.Load(), work.markrootJobs.Load(); work.full != 0 || next < jobs {
		mgc.go#L1964: 		print("runtime: full=", hex(work.full), " next=", next, " jobs=", jobs, " nDataRoots=", work.nDataRoots, " nBSSRoots=", work.nBSSRoots, " nSpanRoots=", work.nSpanRoots, " nStackRoots=", work.nStackRoots, "\n")
		mgc.go#L1977: 	work.stackRoots = nil
		mgc.go#L2038: 	gcController.resetLive(work.bytesMarked)
		mgc.go#L2131: 	work.bytesMarked = 0
		mgc.go#L2132: 	work.initialHeapLive = gcController.heapLive.Load()
		mgcmark.go#L117: 	work.nDataRoots = 0
		mgcmark.go#L118: 	work.nBSSRoots = 0
		mgcmark.go#L123: 		if nDataRoots > work.nDataRoots {
		mgcmark.go#L124: 			work.nDataRoots = nDataRoots
		mgcmark.go#L128: 		if nBSSRoots > work.nBSSRoots {
		mgcmark.go#L129: 			work.nBSSRoots = nBSSRoots
		mgcmark.go#L146: 	work.nSpanRoots = len(mheap_.markArenas) * (pagesPerArena / pagesPerSpanRoot)
		mgcmark.go#L154: 	if work.goroutineLeak.enabled {
		mgcmark.go#L157: 		work.stackRoots, work.nMaybeRunnableStackRoots = allGsSnapshotSortedForGC()
		mgcmark.go#L160: 		work.stackRoots = allGsSnapshot()
		mgcmark.go#L161: 		work.nMaybeRunnableStackRoots = len(work.stackRoots)
		mgcmark.go#L164: 	work.nStackRoots = len(work.stackRoots)
		mgcmark.go#L166: 	work.markrootNext.Store(0)
		mgcmark.go#L167: 	work.markrootJobs.Store(uint32(fixedRootCount + work.nDataRoots + work.nBSSRoots + work.nSpanRoots + work.nMaybeRunnableStackRoots))
		mgcmark.go#L170: 	work.baseData = uint32(fixedRootCount)
		mgcmark.go#L171: 	work.baseBSS = work.baseData + uint32(work.nDataRoots)
		mgcmark.go#L172: 	work.baseSpans = work.baseBSS + uint32(work.nBSSRoots)
		mgcmark.go#L173: 	work.baseStacks = work.baseSpans + uint32(work.nSpanRoots)
		mgcmark.go#L174: 	work.baseEnd = work.baseStacks + uint32(work.nStackRoots)
		mgcmark.go#L180: 	if next, jobs := work.markrootNext.Load(), work.markrootJobs.Load(); next < jobs {
		mgcmark.go#L192: 		if i >= work.nStackRoots {
		mgcmark.go#L226: 	case work.baseData <= i && i < work.baseBSS:
		mgcmark.go#L229: 			workDone += markrootBlock(datap.data, datap.edata-datap.data, datap.gcdatamask.bytedata, gcw, int(i-work.baseData))
		mgcmark.go#L232: 	case work.baseBSS <= i && i < work.baseSpans:
		mgcmark.go#L235: 			workDone += markrootBlock(datap.bss, datap.ebss-datap.bss, datap.gcbssmask.bytedata, gcw, int(i-work.baseBSS))
		mgcmark.go#L257: 	case work.baseSpans <= i && i < work.baseStacks:
		mgcmark.go#L259: 		markrootSpans(gcw, int(i-work.baseSpans))
		mgcmark.go#L264: 		if i < work.baseStacks || work.baseEnd <= i {
		mgcmark.go#L266: 			print("runtime: markroot index ", i, " not in stack roots range [", work.baseStacks, ", ", work.baseEnd, ")\n")
		mgcmark.go#L269: 		gp := work.stackRoots[i-work.baseStacks]
		mgcmark.go#L275: 			gp.waitsince = work.tstart
		mgcmark.go#L785: 	lock(&work.assistQueue.lock)
		mgcmark.go#L786: 	list := work.assistQueue.q.popList()
		mgcmark.go#L788: 	unlock(&work.assistQueue.lock)
		mgcmark.go#L796: 	lock(&work.assistQueue.lock)
		mgcmark.go#L801: 		unlock(&work.assistQueue.lock)
		mgcmark.go#L806: 	oldList := work.assistQueue.q
		mgcmark.go#L807: 	work.assistQueue.q.pushBack(gp)
		mgcmark.go#L814: 		work.assistQueue.q = oldList
		mgcmark.go#L818: 		unlock(&work.assistQueue.lock)
		mgcmark.go#L822: 	goparkunlock(&work.assistQueue.lock, waitReasonGCAssistWait, traceBlockGCMarkAssist, 2)
		mgcmark.go#L837: 	if work.assistQueue.q.empty() {
		mgcmark.go#L849: 	lock(&work.assistQueue.lock)
		mgcmark.go#L850: 	for !work.assistQueue.q.empty() && scanBytes > 0 {
		mgcmark.go#L851: 		gp := work.assistQueue.q.pop()
		mgcmark.go#L873: 			work.assistQueue.q.pushBack(gp)
		mgcmark.go#L884: 	unlock(&work.assistQueue.lock)
		mgcmark.go#L1192: 	if !work.goroutineLeak.enabled {
		mgcmark.go#L1194: 		job := work.markrootNext.Add(1) - 1
		mgcmark.go#L1195: 		return job, job < work.markrootJobs.Load()
		mgcmark.go#L1199: 	for next, jobs := work.markrootNext.Load(), work.markrootJobs.Load(); next < jobs; next = work.markrootNext.Load() {
		mgcmark.go#L1201: 		if work.markrootNext.CompareAndSwap(next, next+1) {
		mgcmark.go#L1267: 	if work.markrootNext.Load() < work.markrootJobs.Load() {
		mgcmark.go#L1306: 		if work.full == 0 {
		mgcmark.go#L1406: 		if work.full == 0 {
		mgcmark.go#L1424: 								if work.markrootNext.Load() < work.markrootJobs.Load() {
		mgcmark_greenteagc.go#L305: 				if !work.spanqMask.read(uint32(gcw.id)) {
		mgcmark_greenteagc.go#L306: 					work.spanqMask.set(gcw.id)
		mgcmark_greenteagc.go#L332: 	if work.spanqMask.read(uint32(w.id)) {
		mgcmark_greenteagc.go#L333: 		work.spanqMask.clear(w.id)
		mgcmark_greenteagc.go#L636: 	lock(&work.spanSPMCs.lock)
		mgcmark_greenteagc.go#L640: 		work.spanSPMCs.list.remove(unsafe.Pointer(r))
		mgcmark_greenteagc.go#L649: 	unlock(&work.spanSPMCs.lock)
		mgcmark_greenteagc.go#L709: 	lock(&work.spanSPMCs.lock)
		mgcmark_greenteagc.go#L711: 	work.spanSPMCs.list.push(unsafe.Pointer(r))
		mgcmark_greenteagc.go#L712: 	unlock(&work.spanSPMCs.lock)
		mgcmark_greenteagc.go#L775: 	lock(&work.spanSPMCs.lock)
		mgcmark_greenteagc.go#L776: 	if gcphase != _GCoff || work.spanSPMCs.list.empty() {
		mgcmark_greenteagc.go#L777: 		unlock(&work.spanSPMCs.lock)
		mgcmark_greenteagc.go#L780: 	r := (*spanSPMC)(work.spanSPMCs.list.head())
		mgcmark_greenteagc.go#L785: 			work.spanSPMCs.list.remove(unsafe.Pointer(r))
		mgcmark_greenteagc.go#L791: 	unlock(&work.spanSPMCs.lock)
		mgcmark_greenteagc.go#L801: 		if !work.spanqMask.read(enum.position()) {
		mgcmark_greenteagc.go#L818: 		work.spanqMask.clear(int32(enum.position()))
		mgcmark_greenteagc.go#L1166: 	if !work.full.empty() {
		mgcmark_greenteagc.go#L1169: 	if work.markrootNext.Load() < work.markrootJobs.Load() {
		mgcmark_greenteagc.go#L1172: 	if work.spanqMask.any() {
		mgcpacer.go#L463: 			work.initialHeapLive>>20, "->",
		mgcpacer.go#L1364: 		gcWaitOnMark(work.cycles.Load())
		mgcwork.go#L164: 	lockWithRankMayAcquire(&work.wbufSpans.lock, lockRankWbufSpans)
		mgcwork.go#L335: 		work.spanqMask.set(w.id)
		mgcwork.go#L343: 		atomic.Xadd64(&work.bytesMarked, int64(w.bytesMarked))
		mgcwork.go#L426: 	if work.empty != 0 {
		mgcwork.go#L427: 		b = (*workbuf)(work.empty.pop())
		mgcwork.go#L434: 	lockWithRankMayAcquire(&work.wbufSpans.lock, lockRankWbufSpans)
		mgcwork.go#L439: 		if work.wbufSpans.free.first != nil {
		mgcwork.go#L440: 			lock(&work.wbufSpans.lock)
		mgcwork.go#L441: 			s = work.wbufSpans.free.first
		mgcwork.go#L443: 				work.wbufSpans.free.remove(s)
		mgcwork.go#L444: 				work.wbufSpans.busy.insert(s)
		mgcwork.go#L446: 			unlock(&work.wbufSpans.lock)
		mgcwork.go#L456: 			lock(&work.wbufSpans.lock)
		mgcwork.go#L457: 			work.wbufSpans.busy.insert(s)
		mgcwork.go#L458: 			unlock(&work.wbufSpans.lock)
		mgcwork.go#L482: 	work.empty.push(&b.node)
		mgcwork.go#L492: 	work.full.push(&b.node)
		mgcwork.go#L500: 	b := (*workbuf)(work.full.pop())
		mgcwork.go#L526: 	lock(&work.wbufSpans.lock)
		mgcwork.go#L527: 	if work.full != 0 {
		mgcwork.go#L533: 	work.empty = 0
		mgcwork.go#L534: 	work.wbufSpans.free.takeAll(&work.wbufSpans.busy)
		mgcwork.go#L535: 	unlock(&work.wbufSpans.lock)
		mgcwork.go#L542: 	lock(&work.wbufSpans.lock)
		mgcwork.go#L543: 	if gcphase != _GCoff || work.wbufSpans.free.isEmpty() {
		mgcwork.go#L544: 		unlock(&work.wbufSpans.lock)
		mgcwork.go#L550: 			span := work.wbufSpans.free.first
		mgcwork.go#L554: 			work.wbufSpans.free.remove(span)
		mgcwork.go#L558: 	more := !work.wbufSpans.free.isEmpty()
		mgcwork.go#L559: 	unlock(&work.wbufSpans.lock)
		mheap.go#L2423: 	if work.strongFromWeak.block {
		mheap.go#L2485: 	for work.strongFromWeak.block {
		mheap.go#L2486: 		lock(&work.strongFromWeak.lock)
		mheap.go#L2490: 		work.strongFromWeak.q.pushBack(getg())
		mheap.go#L2493: 		goparkunlock(&work.strongFromWeak.lock, waitReasonGCWeakToStrongWait, traceBlockGCWeakToStrongWait, 2)
		mheap.go#L2509: 	lock(&work.strongFromWeak.lock)
		mheap.go#L2510: 	list := work.strongFromWeak.q.popList()
		mheap.go#L2512: 	unlock(&work.strongFromWeak.lock)
		mprof.go#L1323: 		return work.goroutineLeak.count, false
		mprof.go#L1329: 	n = work.goroutineLeak.count
		proc.go#L5721: 	return work.goroutineLeak.count
		proc.go#L6068: 		work.spanqMask = work.spanqMask.resize(nprocs)
		proc.go#L6133: 		work.spanqMask = work.spanqMask.resize(nprocs)